package com.king.eventbusdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import com.king.eventbusdemo.entity.EventBusBean;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import java.util.Timer;
import java.util.TimerTask;

public class SamePageActivity extends AppCompatActivity {


    TextView tv_content;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_same_page);
        //注册
        EventBus.getDefault().register(SamePageActivity.this);
        initView();
    }

    private void initView() {
        tv_content = findViewById(R.id.tv_content);
    }

//    EventBus的四种线程模型（ThreadMode）
//        POSTING（默认）：如果使用事件处理函数指定了线程模型为POSTING，那么该事件在哪个线程发布出来的，事件处理函数就会在这个线程中运行，也就是说发布事件和接收事件在同一个线程。在线程模型为POSTING的事件处理函数中尽量避免执行耗时操作，因为它会阻塞事件的传递，甚至有可能会引起应用程序无响应（ANR）。
//        MAIN：事件的处理会在UI线程中执行。事件处理时间不能太长，长了会ANR的。
//        BACKGROUND：如果事件是在UI线程中发布出来的，那么该事件处理函数就会在新的线程中运行，如果事件本来就是子线程中发布出来的，那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。
//        ASYNC：无论事件在哪个线程发布，该事件处理函数都会在新建的子线程中执行，同样，此事件处理函数中禁止进行UI更新操作
    //子线程操作不可更新UI线程数据
   /* @Subscribe(threadMode = ThreadMode.ASYNC)
    @Subscribe(threadMode = ThreadMode.BACKGROUND)//
   @Subscribe(threadMode = ThreadMode.POSTING)//默认值
   public void messageEvent(EventBusBean eventBusBean){
        Log.e("EventBus",eventBusBean.name+"---"+eventBusBean.pwd);
   }*/
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void messageEvent(EventBusBean eventBusBean){
        tv_content.setText(eventBusBean.name+"---"+eventBusBean.pwd);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解注册（为防止内存泄漏）
        EventBus.getDefault().unregister(SamePageActivity.this);
    }

    public void voidset(View view) {
        Timer timer = new Timer();
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                int randomnum = (int) (Math.random() * 100);
                EventBus.getDefault().post(new EventBusBean(randomnum+"",randomnum+"wqfrw"));
            }
        };
        timer.schedule(timerTask,
                1000,//延迟1秒执行
                3000);//周期时间

    }
}
